package com.udima.reglocation;

import org.json.JSONException;
import org.json.JSONObject;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.TextView;
import android.widget.Toast;

import com.udima.reglocation.entities.UserSession;
import com.udima.reglocation.util.AsyncTaskCompleteListener;
import com.udima.reglocation.util.HttpAsyncTask;
import com.udima.reglocation.util.LogHelper;
import com.udima.reglocation.util.PreferencesHandler;
import com.udima.reglocation.util.UserSessionHandler;

/**
 * 
 * Menú principal de la aplicación
 * 
 * @author luis
 * 
 */

public class TrackMenuActivity extends Activity implements AsyncTaskCompleteListener {

	private TextView lblGotoConf;
	private TextView lblGotoSave;
	private TextView lblGotoList;
	private TextView lblGotoChangePwd;
	private TextView lblGotoLogout;

	@Override
	/**
	 * Método que se ejecuta tras la creación de la actividad
	 *    
	 * En la creación de la clase se instancian los objetos del menú y se
	 * crean las funciones de escucha para los botones
	 *    
	 * @param savedInstanceState Contiene la información previa de la actividad en caso de que se vuelva a recrear
	 */
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.menu_track_activity);

		lblGotoConf = (TextView) findViewById(R.id.link_to_conf);
		lblGotoConf.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				Intent itemintent = new Intent(TrackMenuActivity.this, ConfigureUserActivity.class);
				TrackMenuActivity.this.startActivity(itemintent);
			}
		});

		lblGotoChangePwd = (TextView) findViewById(R.id.link_to_change_pwd);
		lblGotoChangePwd.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				Intent itemintent = new Intent(TrackMenuActivity.this, ChangePasswordActivity.class);
				TrackMenuActivity.this.startActivity(itemintent);
			}
		});

		lblGotoSave = (TextView) findViewById(R.id.link_to_use);
		lblGotoSave.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				Intent itemintent = new Intent(TrackMenuActivity.this, SaveTrackActivity.class);
				TrackMenuActivity.this.startActivity(itemintent);
			}
		});

		lblGotoList = (TextView) findViewById(R.id.link_to_list);
		lblGotoList.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				Intent itemintent = new Intent(TrackMenuActivity.this, ListTrackActivity.class);
				TrackMenuActivity.this.startActivity(itemintent);
			}
		});

		lblGotoLogout = (TextView) findViewById(R.id.link_to_logout);
		lblGotoLogout.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				logoutUser();
			}
		});
	}

	/**
	 * 
	 * Método que ejecuta el logout del usuario activo
	 * 
	 */
	private void logoutUser() {

		UserSessionHandler ush = new UserSessionHandler(getApplicationContext());
		UserSession session = ush.retrieveUserSession();
		if (session == null) {
			// No hay sesión. Se redirige al usuario a la ventana de login
			Intent i = new Intent(getBaseContext(), LoginActivity.class);
			startActivity(i);
		} else {

			PreferencesHandler ph = new PreferencesHandler(getApplicationContext());
			String appBaseUrl = ph.retrieveAppBaseUrl();

			JSONObject jsonReq = new JSONObject();
			JSONObject jsonUserSession = new JSONObject();
			try {
				jsonUserSession.put("userId", session.getUserId());
				jsonUserSession.put("sessionToken", session.getSessionToken());
				jsonReq.put("userSession", jsonUserSession);
			} catch (JSONException e) {
				Toast.makeText(getBaseContext(), "Error grave!! Revise el log de la aplicación", Toast.LENGTH_LONG).show();
				LogHelper.logError("Error parsing json result", e);
			}

			// Definición del callback particular para el logout
			final AsyncTaskCompleteListener callback = new AsyncTaskCompleteListener() {

				@Override
				public void onTaskComplete(String result) {

					if (HttpAsyncTask.CONNECTIONERROR.equals(result)) {
						Toast.makeText(getBaseContext(), "Error conectando con el servidor", Toast.LENGTH_LONG).show();
						// No conexión con el servidor. Se redirige al usuario a
						// la ventana de login
						Intent i = new Intent(getBaseContext(), LoginActivity.class);
						startActivity(i);
					} else {
						// Primero se transforma el resultado a un objeto Json
						try {
							JSONObject json = new JSONObject(result);

							if (json.getString("responseSuccessful") == "true") {
								Intent itemintent = new Intent(TrackMenuActivity.this, LoginActivity.class);
								TrackMenuActivity.this.startActivity(itemintent);
							} else {
								Toast.makeText(getBaseContext(), json.getString("responseErrors"), Toast.LENGTH_SHORT).show();
							}
						} catch (JSONException e) {
							Toast.makeText(getBaseContext(), "Error grave!! Revise el log de la aplicación", Toast.LENGTH_LONG).show();
							LogHelper.logError("Error parsing json result", e);
						}
					}
				}
			};

			// Ejecución de la consulta al servicio rest de logout
			new HttpAsyncTask(this) {
				@Override
				protected void onPostExecute(String result) {
					super.onPostExecute(result);
					callback.onTaskComplete(result);
				}
			}.execute(appBaseUrl + "/rest/users/logout", jsonReq.toString());

		}
	}

	@Override
	/**
	 * Declaracion del interfaz que se invoca tras la consulta http asíncrona
	 * 
	 * @param result Cadena con el resultado de la consulta
	 */
	public void onTaskComplete(String result) {
	}

	@Override
	/**
	 * 
	 * Metodo que deja vacia la posibilidad de utilizar el boton "volver" en esta actividad
	 * 
	 */
	public void onBackPressed() {
		// eliminamos la posibilidad de volver atrás desde el menú principal
	}
}
